草庐IT

Android Proguard 不内联

全部标签

c++ - C++ 类中的内联规则是什么?

从我很久以前在某处读到的,似乎如果你想在编译阶段内联类成员函数,则必须在类声明block中定义该函数。但这有一个细节泄漏的缺点。恕我直言,其他程序员在打开.h文件时应该只看到类接口(interface)。第一个语句在现代C++中是否仍然正确,曾经是吗?有没有办法强制内联声明的函数,最好是完全在另一个文件中?在类声明block中保留简短的成员函数通常更好吗? 最佳答案 Itseemsthatifyouwantclassmemberfunctiontobeinlinedduringthecompilationphase,thefunct

c++ - 有选择地内联函数(用于调试目的)?

我想要的是一个构建配置,其中函数不内联,除了一些选定的函数(可能内联也可能不内联,那将是取决于编译器)。更好的是某种“内联级别”,我可以在其中为每个函数指定这样的级别,并在构建时加上最低级别,并且只允许内联高于最低级别的函数。我知道对此没有标准的解决方案,但同样欢迎特定于编译器的黑客攻击。我希望能够在调试器中逐步执行我的大部分非内联函数,但应该内联其中的少数函数,部分是出于性能原因,部分是为了避免超深的调用堆栈。该代码涉及一些非常讨厌的模板元编程,但该部分大部分已完成,所以我想专注于其余部分。因此,最好内联属于模板元程序的函数,而不是其他内联函数。有什么办法可以达到这样的目的吗?

c++ - 编译器是否更有可能使用指定的 inline 关键字在类声明中内联函数?

我最近在查看一位同事的代码,注意到他在类声明中定义的一堆Getter函数前面放置了“inline”关键字。例如classFoo{public:inlineboolGetBar()const{returnm_Bar;}private:boolm_Bar;};我在代码审查中建议他删除内联关键字,正如我在许多不同的地方读到的那样,在类声明中定义函数是由编译器解释的(在这种情况下为MSVC,但显然是C++标准的一部分)作为作者想要内联函数的指示。我的感觉是,如果额外的文本没有任何作用,那只是不必要的困惑,应该删除。他的回应如下:inline关键字让与此代码交互的其他程序员清楚地知道这些函数是/

c++ - 调用内联汇编的正确方法

这个问题在这里已经有了答案:Whatisthedifferencebetween'asm','__asm'and'__asm__'?(4个答案)关闭6年前。我只是在探索在C++源代码中包含程序集。它似乎是从调用asm()开始的,但我也看到了_asm()和__asm()。下划线之间有什么区别?如果相关的话,我对GNU编译器最感兴趣。编辑:来自thisforum_asm-simplyinvokestheinlineassembler__asm-istreatedlikeanintrinsicfunctioncall不确定这是真的还是胡扯?

c++ - 两个类和内联函数

我有两个类,它们都使用了其他一些类,例如://class1.hclassClass1;#include"class2.h"classClass1{public:staticClass2*C2;...};//class2.hclassClass2;#include"class1.h"classClass2{public:staticClass1*C1;...};当我像上面的例子那样定义它时,它起作用了(我也有一些#ifndef来避免无限的header重复)。但我也想在我的类中添加一些内联函数。我读了here我应该将内联函数的定义放在头文件中,因为如果我将它们放在cpp文件中并想从其他cp

c++ - 不是内联过早优化吗?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:InlinefunctionsinC++现代编译器比程序员更擅长决定什么应该内联,什么不应该。就像register一样,内联函数不应该只是编译器的工作,并且被认为是过早的优化吗?

【C++】---命名空间,缺省参数,函数重载,内联函数等

C++入门一、命名空间1.命名空间(namespace)的定义(1)命名空间的格式:(2)命名空间可以嵌套(3)可以有多个命名空间2.域以及编译器的搜索原则3.namespace的三种使用方式二、C++的输入与输出注意:三、缺省参数1.缺省参数的定义2.缺省参数的分类四、函数重载1.函数重载的概念2.C++支持函数重载的原因五、引用1.引用的定义2.引用的特性3.使用场景(1)做参数(2)做返回值1.传值返回2.传引用返回3.传值和传引用的区别4.引用和指针引用和指针的不同点六、内联函数1.内联函数的概念2.特性七、auto和nullptr1.关键字:auto2.nullptr一、命名空间1.

C++ 内联函数和上下文特定优化

我在ScottMeyers的EffectiveC++书中读到:当您内联一个函数时,您可以让编译器对函数体执行上下文特定的优化。这种优化对于正常的函数调用是不可能的。现在的问题是:什么是上下文特定优化以及为什么需要它? 最佳答案 我不认为“上下文特定优化”是一个已定义的术语,但我认为它基本上意味着编译器可以分析调用站点及其周围的代码并使用此信息来优化函数。这是一个例子。当然,它是人为设计的,但它应该证明这个想法:功能:intfoo(inti){if(i调用站点:intbar(){inti=5;returnfoo(i);}如果foo是单

c++ - SSE 内联汇编和可能的 g++ 优化错误

让我们从代码开始。我有两种结构,一种用于vector,另一种用于矩阵。structAVector{explicitAVector(floatx=0.0f,floaty=0.0f,floatz=0.0f,floatw=0.0f):x(x),y(y),z(z),w(w){}AVector(constAVector&a):x(a.x),y(a.y),z(a.z),w(a.w){}AVector&operator=(constAVector&a){x=a.x;y=a.y;z=a.z;w=a.w;return*this;}floatx,y,z,w;};structAMatrix{//Row-ma

c++ - 有没有办法在 GCC 中禁用内联汇编程序?

我正在为LeetCode、Codeforces等编程竞赛开发一个在线评委系统。对于大多数编程竞赛,C/C++中不允许使用内联汇编程序,因此我想在我的系统中添加相同的限制。我想让GCC和G++在编译包含内联汇编的C/C++程序时产生错误,这样任何包含内联汇编的代码都会导致编译错误。有办法实现吗?我应该将一些命令行参数传递给GCC/G++吗?注意:禁用内联汇编只是为了遵守规则,而不是出于安全考虑。 最佳答案 有没有办法在GCC中禁用内联汇编程序?是的,有几种方法。在编译器中关闭汇编要在编译阶段执行此操作,请使用参数-fno-asm。但是